package com.demo.utils;

import cn.hutool.core.lang.Validator;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.poifs.filesystem.FileMagic;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.Objects;
import java.util.regex.Pattern;

/**
 * @author wangfengchen
 */
public class CheckUtil {

  private static final String XLSX = "xlsx";

  private CheckUtil() {

  }

  //校验手机号/座机号(项目hutools版本太低,版本高可以直接用hutools)
  public static boolean checkMobile(String mobile) {
    //校验黑名单号码,(手机号/座机号)
    boolean isMobile = Validator.isMobile(mobile);
    if (!isMobile) {
      Pattern compile = Pattern.compile("0\\d{2,3}[\\- ]?[1-9]\\d{6,7}|[48]00[\\- ]?[1-9]\\d{6}");
      isMobile = Validator.isMatchRegex(compile, mobile);
      return isMobile;
    }
    return true;
  }

  /**
   * 校验上报文件是否是excel
   *
   * @param file
   * @return
   */
  public static boolean uploadIsExcelFile(MultipartFile file) {
    //1.文件校验
    if (file == null || file.isEmpty() || file.getSize() == 0) {
      return false;
    }

    //2.校验文件后缀
    String suffixName = FilenameUtils.getExtension(file.getOriginalFilename());
    if (!StringUtils.equals(XLSX, suffixName)) {
      return false;
    }
    //3.魔数校验
    try (InputStream inputStream = file.getInputStream()) {
      InputStream fileMagics = FileMagic.prepareToCheckMagic(inputStream);
      FileMagic fileMagic = FileMagic.valueOf(fileMagics);
      if (!Objects.equals(fileMagic, FileMagic.OLE2) && !Objects.equals(fileMagic, FileMagic.OOXML)) {
        return false;
      }
    } catch (IOException ioException) {
      return false;
    }
    return true;
  }

  /**
   * 判断字符串是否乱码
   *
   * @param s 字符串
   * @return 是否
   */
  public static boolean isErrorCode(String s) {
    return !(Charset.forName("GBK").newEncoder().canEncode(s));
  }

  /**
   * 判断是否为json字符串
   *
   * @param content
   * @return
   */
  public static boolean isJSONString(String content) {
    if (StringUtils.isEmpty(content)) {
      return false;
    }
    if (!content.startsWith("{") || !content.endsWith("}")) {
      return false;
    }
    try {
      JSONObject.parse(content);
      return true;
    } catch (Exception e) {
      return false;
    }
  }

}

